package com.demo.core.service;

import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.net.URL;
import java.util.List;

import com.demo.core.model.File;
import com.demo.core.model.Folder;
import com.demo.core.service.exception.FileCreateException;

/**
 * 资源服务接口
 * @author ryuu.kk
 *
 */
public interface ResourceService {

	/**
	 * 过滤模式
	 * @author ryuu.kk
	 *
	 */
	public enum FilterMode {
		// 包含模式
		include{
			
		},
		// 排除模式
		exclude {
			
		},
		// 允许所有
		all {
			
		}
	}
	
	/**
	 * 取得资源服务模型
	 * @param path 资源路径
	 * @return Folder
	 */
	Folder resourceFolder(String path);
	
	/**
	 * 取得资源服务模型
	 * @param url 资源路径
	 * @return Folder
	 */
	Folder resourceFolder(URL url);
	
	/**
	 * 取得资源服务模型
	 * @param url 资源URL路径
	 * @param filter FileFilter
	 * @return Folder
	 */
	Folder resourceFolder(URL url, FileFilter filter);
	
	/**
	 * 取得资源服务模型
	 * @param url 资源URL路径
	 * @param filterMode 排除模式（枚举）
	 * @param extension 文件扩展名
	 * @return Folder
	 */
	Folder resourceFolder(URL url, FilterMode filterMode, String... extension);
	
	/**
	 * 取得资源文件模型
	 * @param path 资源路径
	 * @return File
	 */
	File resourceFile(URL url);
	
	/**
	 * 取得资源文件模型列表
	 * @param path 资源路径
	 * @return List<File> 文件列表
	 */
	List<File> resourceFileList(URL url);
	
	/**
	 * 取得资源文件的输出流
	 * @param path 文件路径
	 * @return InputStream
	 */
	InputStream getStream(URL url);
	
	/**
	 * 存储资源
	 * 包含资源的文件和文件夹
	 * 如果文件存在,则不创建
	 * @param path String
	 * @throws ObjectCreateException 创建异常
	 */
	boolean create(URL url) throws FileCreateException;
	
	/**
	 * 删除存储资源目录
	 * @param path String
	 * @throws FileNotFoundException 文件未找到异常
	 */
	boolean delete(URL url) throws java.io.FileNotFoundException;
	
	/**
	 * 取得资源文件模型
	 * @param path 资源路径
	 * @return File
	 */
	File resourceFile(String path);
	
	/**
	 * 取得资源文件模型列表
	 * @param root 资源根路径
	 * @param path 资源路径
	 * @return List<File> 文件列表
	 */
	List<File> resourceFileList(String root, String path);
	
	/**
	 * 取得资源文件的输出流
	 * @param path 文件路径
	 * @return InputStream InputStream 
	 * @throws FileNotFoundException 
	 * @Deprecated 由于字节流的关闭问题 
	 */
	@Deprecated 
	InputStream getStream(String path) throws FileNotFoundException;
	
	/**
	 * 取得资源文件的字节数组
	 * @param path 文件路径
	 * @return byte[] 字节数组
	 * @throws FileNotFoundException
	 */
	byte[] getContent(String path) throws FileNotFoundException;
	
	/**
	 * 存储资源
	 * 包含资源的文件和文件夹
	 * @param path String
	 * @throws ObjectCreateException 创建异常
	 */
	boolean create(String path) throws FileCreateException;
	
	/**
	 * 存储资源
	 * 包含资源的文件、文件夹和文件内容
	 * @param path String 文件路径
	 * @param name String 文件名
	 * @param content String 文件内容
	 * @throws ObjectCreateException 创建异常
	 */
	boolean create(String path, String name, String content) throws FileCreateException;
	
	/**
	 * 存储资源
	 * 包含资源的文件、文件夹和文件内容
	 * @param path String 文件路径
	 * @param name String 文件名
	 * @param java.io.File file 文件内容(存放在临时文件内)
	 * @throws ObjectCreateException 创建异常
	 */
	boolean create(String path, String name, java.io.File file) throws FileCreateException;
	
	/**
	 * 删除存储资源目录
	 * @param path String
	 * @throws FileNotFoundException 文件未找到异常
	 */
	boolean delete(String path) throws java.io.FileNotFoundException;
	
	/**
	 * 创建Json字符串
	 * @param url URL
	 * @param filter FileFilter
	 * @return String json字符串
	 */
	String buildJson(URL url, FileFilter filter);
	
	/**
	 * 创建Json字符串
	 * @param path String
	 * @param filter FileFilter
	 * @return String json字符串
	 */
	String buildJson(String path, FileFilter filter);
}
